\documentclass[12pt]{report}


\input{macros}

\begin{document}

\author{Edited by\\
  H.J. Lu\thanks{hongjiu.lu@intel.com},
  Michael Matz\thanks{matz@suse.de},
  Milind Girkar\thanks{milind.girkar@intel.com},
  Jan Hubi\v{c}ka\thanks{jh@suse.cz},\\
  Andreas Jaeger\thanks{aj@suse.de},
  Mark Mitchell\thanks{mark@codesourcery.com}}

\title{System V Application Binary Interface\\
{\Large AMD64 Architecture Processor Supplement\\
(With LP64 and ILP32 Programming Models)\\
Version \version}}
\maketitle
\tableofcontents
\listoftables
\listoffigures

\section*{Revision History}

\begin{description}


\item[Intel] Changes to this document made by Intel Corporation are
 copyright Intel Corporation and licensed under CC BY 4.0:
 \url{https://creativecommons.org/licenses/by/4.0/legalcode}.
\item[1.0] Document _Unwind_GetIPInfo.  Update to match C++ ABI.  Add
  chapter for alternate code sequences For security.
\item[0.99] Add description of TLS relocations (thanks to Alexandre
  Oliva) and mention the decimal floating point and AVX types (thanks to
  H.J. Lu).
\item[0.98] Various clarifications and fixes according to feedback
  from Sun, thanks to Terrence Miller.  DWARF register numbers for some
  system registers, thanks to Jan Beulich.  Add \code{R_X86_64_SIZE32} and
  \code{R_X86_64_SIZE64} relocations; extend meaning of \code{e_phnum}
  to handle more than 0xffff program headers, thanks to Rod Evans.
  Add footnote about passing of \code{decimal} datatypes. 
  Specify that \code{_Bool} is booleanized at the caller.
\item[0.97] Integrate Fortran ABI.
\item[0.96] Use \code{SHF_X86_64_LARGE} instead \code{SHF_AMD64_LARGE}
  (thanks to Evandro Me\-ne\-zes).  Correct various grammatical errors
  noted by Mark F. Haigh, who also noted that there are no global VLAs
  in C99.  Thanks also to Robert R. Henry.
\item[0.95] Include description of the medium PIC memory model (thanks
  to Jan Hubi\v{c}ka) and large model (thanks to Evandro Menezes).
\item[0.94] Add sections in Development Environment, Program Loading,
  a description of EH_FRAME sections and general cleanups to make
  text in this ABI self-contained.  Thanks to Michael Walker and Terrence
  Miller.
\item[0.93] Add sections about program headers, new section types and
  special sections for unwinding information.  Thanks to Michael
  Walker.
\item[0.92] Fix some typos (thanks to Bryan Ford), add section about
  stack layout in the Linux kernel.  Fix example in figure~
  \ref{fig_passing_example} (thanks to Tom Horsley).  Add section on
  unwinding through assembler (written by Michal Ludvig).  Remove
  \code{mmxext} feature (thanks to Evandro Menezes).  Add section on
  Fortran (by Steven Bosscher) and stack unwinding (by Jan
  Hubi\v{c}ka).
\item[0.91] Clarify that x87 is default mode, not MMX (by Hans Peter
  Anvin).
\item[0.90]
  Change DWARF register
  numbers again; mention that \code{__m128} needs alignment; fix typo
  in figure~\ref{fig-stack-frame}; add some comments on kernel
  expectations; mention TLS extensions; add example for passing of
  variable-argument lists; change semantics of \RAX in
  variable-argument lists; improve formatting; mention that X87 class
  is not used for passing; make \code{/lib64} a Linux specific
  section; rename x86-64 to AMD64; describe passing of complex types.
  Special thanks to Andi Kleen, Michal Ludvig, Michael Matz, David
  O'Brien and Eric Young for their comments.
\item[0.21] Define \code{__int128} as class INTEGER in register
  passing.  Mention that \reg{al} is used for variadic argument lists.  Fix
  some textual problems.  Thanks to H. Peter Anvin, Bo Thorsen, and
  Michael Matz.
\item[0.20 --- 2002-07-11] Change DWARF register number values of
  \RBX, \RSI, \RSI (thanks to Michal Ludvig).  Fix footnotes for
  fundamental types (thanks to H. Peter Anvin). Specify \code{size\_t}
  (thanks to Bo Thorsen and Andreas Schwab).  Add new section on
  floating point environment functions.
\item[0.19 --- 2002-03-27] Set name of Linux dynamic linker, mention
  \reg{fs}.
  Incorporate changes from H. Peter Anvin <hpa@zytor.com>
  for booleans and define handling of sub-64-bit integer types in
  registers.
\end{description}

\include{introduction}
\include{sw-installation}
\include{low-level-sys-info}
\include{object-files}
\include{dl}
\include{libraries}
\include{development}
\include{execution}

%%% Bah, we can't nest includes, hence begin the chapter outside
%%% of the included file, so that conventions and fortran come to lie
%%% in the same chapter
\chapter{Conventions}\editornote{This chapter is used to document some features special to
  the \xARCH ABI.  The different sections might be moved to another
  place or removed completely.}
\include{conventions}
\include{fortran}
\include{x32}
\include{secure}
\include{mpx}

\appendix
\include{kernel}
\include{linker-optimization}
\include{abi-index}

\end{document}
